Что представляют собой генераторы в Python, как функционирует метод send() в этих генераторах и каким образом его можно применять для управления их поведением?

Генераторы в Python представляют собой функции, которые применяют оператор yield для возврата значений и временной приостановки выполнения. С помощью метода send() можно отправлять данные обратно в генератор, которые затем могут быть использованы при следующем возобновлении его работы. Это делает генераторы двусторонними, позволяя не только получать значения, но и передавать данные внутрь.
🔥 Конкурс: 30 000 ₽ за самую смешную IT-новость

Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.

👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.

🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе

🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.

📅 Сроки: прием новостей до 11 мая включительно

Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8

Осталась неделя — ждем ваших новостей!
⌨️ Топ-вакансий для питонистов за неделю

Junior Python Developer (Data) — до 200 000, удалёнка

Team Lead (Python) команды разработки — от 350 000 до 450 000 ₽, удалёнка (Москва)

Junior Python developer — от 100 000 до 130 000 ₽, офис (Москва)

Python разработчик, гибрид (Москва, Санкт-Петербург)

Программист Python junior — от 100 000 ₽, гибрид (Москва)

➡️ Еще больше топовых вакансий — в нашем канале Python jobs

Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
🔰 How to: как сделать логические выражения в Python читаемыми

Длинные логические выражения — бич читаемости. Вот простой пример:
if user["verified"] and event["date"] > datetime.now() and not event["full"]:
print("Here's the event signup form...")


Выглядит компактно, но читается не очень. Есть несколько способов сделать лучше.

📝 Разбивка по строкам с операторами в начале
if (user["verified"]
and event["date"] > datetime.now()
and not event["full"]):
print("Here's the event signup form...")


PEP8 рекомендует именно такой стиль — с операторами (and, or) в начале строки.

📝 Использование переменных для подвыражений
user_is_verified = user["verified"]
event_in_future = event["date"] > datetime.now()
event_not_full = not event["full"]

if user_is_verified and event_in_future and event_not_full:
print("Here's the event signup form...")


Такой подход улучшает понимание выражения до того, как вы вчитываетесь в детали.

📝 Использование функций вместо переменных
def is_verified(user): return user["verified"]
def in_future(event): return event["date"] > datetime.now()
def not_full(event): return not event["full"]

if is_verified(user) and in_future(event) and not_full(event):
print("Here's the event signup form...")


Функции полезны, если важно сохранить short-circuit поведение (когда выражения дальше не выполняются, если результат уже ясен).

📝 Закон де Моргана для упрощения условий

Если видите выражение вида not (a or b) — можно применить трансформацию:
# Было:
not (a or b)

# Стало:
not a and not b


Пример:
def can_only_read(user):
return not (
user["role"] == "admin"
or "edit" in user["permissions"]
)


Упростим по де Моргану:
def can_only_read(user):
return user["role"] != "admin" and "edit" not in user["permissions"]


Теперь читается проще и интуитивнее.

Вывод: не бойтесь разбивать выражения, давать им имена и упрощать через логические законы. Код должен быть понятным не только компьютеру, но и людям.

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🏗 7 архитектурных паттернов, которые должен знать каждый программист

Хочешь писать код, который не разваливается через полгода? Понимание архитектурных паттернов — ключ к стабильным и масштабируемым приложениям.

📌 Мы собрали 7 базовых подходов, которые должен знать каждый разработчик. Подходит для тех, кто хочет прокачать архитектурное мышление, уверенно проходить собеседования и строить проекты «на вырост».

👉 Ссылка на статью: https://clc.to/tgproglibacademy6

Библиотека питониста
👍 Команда дня: contextlib.suppress

Сегодня разберём полезную команду для работы с contextlib.suppress — удобный способ игнорировать определённые исключения без громоздкого try-except.

from contextlib import suppress

# Игнорируем FileNotFoundError при удалении файла
with suppress(FileNotFoundError):
import os
os.remove("non_existent_file.txt")


Зачем это нужно:
Упрощает код, когда вы хотите молча пропустить определённые ошибки.
Например, удаление файла, который может не существовать, или обработка данных, где некоторые ключи могут отсутствовать.

Пример из реальной жизни:
data = {"name": "Alice"}
with suppress(KeyError):
print(data["age"]) # Не сломается, даже если ключа "age" нет


Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔵 11 устаревших Python-модулей, которые следует больше не использовать, и их современные аналоги

Использование старых модулей может привести к неожиданным ошибкам в проектах.

Вот 11 устаревших Python-модулей и их современные аналоги:

1️⃣ Pipes (удален с Python 3.13)

Модуль pipes был удален, так как был заменен более мощным и кросс-платформенным модулем subprocess.

import subprocess

result = subprocess.run("echo Hello | tr a-z A-Z", shell=True, capture_output=True, text=True)
print(result.stdout) # HELLO


2️⃣ typing.Text

Тип Text был предназначен для совместимости с Python 2, и теперь его можно заменить на str.

def greet(name: str) -> str:
return f"Hello, {name}!"


3️⃣ urllib

Модуль urllib устарел для работы с HTTP-запросами. Вместо него лучше использовать requests или urllib3.

import requests

response = requests.post('https://httpbin.org/post', json={'name': 'Yang'})
print(response.json())


4️⃣ crypt

Модуль crypt устарел и его заменил более безопасный модуль bcrypt для хеширования паролей.

import bcrypt

password = b"strongpassword"
hashed = bcrypt.hashpw(password, bcrypt.gensalt())


5️⃣ Устаревшие подсказки типов

С Python 3.9 можно использовать встроенные типы без импорта из модуля typing.

def func(x: list[int]) -> dict[str, int]:
return {}


6️⃣ Старые стили форматирования строк

Использование % или .format() устарело. Современный способ — это f-строки.

name = "Yang"
print(f"My name is {name}.")


7️⃣ cgi

Модуль cgi устарел и заменен современными фреймворками для веб-разработки, такими как Flask или FastAPI.

8️⃣ ossaudiodev

Модуль ossaudiodev устарел, и для работы с аудио рекомендуется использовать такие модули, как pyaudio или sounddevice.

9️⃣ pickle

Модуль pickle может быть опасным для использования, так как есть риски выполнения вредоносного кода. Для безопасной сериализации лучше использовать json.

import json

data = {"name": "Yang"}
with open('data.json', 'w') as f:
json.dump(data, f)


🔟 asyncore и asynchat

Эти модули устарели, и теперь лучше использовать asyncio для асинхронного программирования.

🔟 + 1️⃣ random

Модуль random использует предсказуемый алгоритм, который небезопасен для генерации паролей. Используйте secrets для криптографически стойких случайных чисел.

import secrets

password = secrets.token_hex(16)


Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🎙 Что послушать: Developer Trends 2025

Новый выпуск подкаста Talk Python to Me посвящён главным трендам 2025 года:
➡️ какие технологии на подъёме,
➡️ что показывает последний опрос Stack Overflow,
➡️ и куда движется Python-сообщество.

📌 Темы:
— Стоит ли изучать новые базы данных или это хайп?
— Что теряет актуальность?
— Как поменялись роли разработчиков и ожидания в индустрии?

▶️ Слушать: https://clc.to/4neIiA

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🆕 Появился ty — молниеносный type checker для Python на Rust

Разработчики представили ty — новый инструмент для проверки типов и language server для Python, написанный на Rust. Обещают высокую скорость и удобство интеграции с редакторами.

⚠️ Пока что это pre-release:
— баги,
— отсутствующие фичи,
— возможны критические ошибки.

ty ещё не готов к продакшну, но активно развивается. Инструмент уже вызывает интерес у сообщества — особенно за счёт скорости и амбиций.

👀 Следим за развитием: https://clc.to/1jvRfg

Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
😱 14 продвинутых фишек Python, которые вы вряд ли видели

Python известен своей простотой, но за лаконичным синтаксисом скрываются мощные и недооценённые возможности.

В этой подборке — 14 нестандартных приёмов: от «непитоничных» конструкций до малоизвестных трюков, которые помогают писать код гибче, чище и умнее.

🔍 Внутри:
— неожиданные фичи
— примеры и объяснения
— ссылки на ресурсы для углубления

📄 Читайте статью и удивляйтесь, на что способен Python: https://clc.to/YzUlOA

Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Холивар: Linux — для гибкости, macOS — для эстетики, Windows — для универсальности

Программисты, делитесь: на чём предпочитаете писать код?

🐧 Linux: терминал и свобода
📝 Максимальный контроль — можно настроить всё: от ядра до оконного менеджера. Arch, Manjaro, Kali? Полный выбор.
📝 Open Source: свободное ПО без необходимости платить за лицензии.
📝 Терминал — главный инструмент. sudo apt-get install — и всё под контролем.

Минусы:
— Настройка драйверов и оборудования может занять время.
— Работа с проприетарным ПО (например, Photoshop) — отдельный квест.
— Интерфейс не всегда дружелюбен для новичков.

🍎 macOS: стиль и стабильность
📝 Экосистема Apple: Xcode, iOS-разработка, отличная интеграция между устройствами.
📝 Стабильность и надёжность — система работает как часы.
📝 Приятный интерфейс и дизайн, который вдохновляет.

Минусы:
— Высокая цена на устройства.
— Ограниченные возможности апгрейда.
— Закрытая система с меньшей гибкостью.

🪟 Windows: универсальный солдат
📝 Работает «из коробки»: Visual Studio, Unity, .NET — всё готово для разработки.
📝 Поддержка большинства игр и софта.
📝 Огромный выбор устройств: от бюджетных до топовых игровых машин.

Минусы:
— Автоматические обновления могут прервать работу.
— Требуется внимание к безопасности: антивирус — must-have.
— Подсистема WSL — шаг вперёд, но до полноценного Linux ещё есть путь.

А вы на какой стороне?
❤️ Linux — свобода и гибкость
👍 macOS — красота и стабильность
🔥 Windows — универсальность и удобство

Пишите в комментариях, почему ваша ОС — лучший выбор для разработчика. Без ссор — только аргументы и опыт.
P.S. Инструкция, как оставить коммент

Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 JetBrains перестанет выпускать бинарные сборки PyCharm Community Edition

Начиная с версии 2025.3, бесплатная версия PyCharm Community Edition больше не будет доступна как готовая программа. JetBrains оставит только исходный код — пользователям придётся собирать IDE самостоятельно.

Что это значит:
📝 Код PyCharm CE останется открытым (Open Source).
📝 Готовые установщики (бинарные сборки) больше публиковаться не будут.
📝 Альтернатива — перейти на PyCharm Unified Edition (новая объединённая IDE с платными и бесплатными функциями).

💬 Это решение уже вызывает волну критики среди пользователей. Установка из исходников — не для всех, а Unified Edition может потребовать платную подписку.

🔗 Подробнее: что такое Unified PyCharm и как это работает

Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
📱 Python новости

🚀 Релизы и инструменты:
Python 3.14.0 beta 1 — первые шаги к новому стабильному релизу
ty — супербыстрый type checker на Rust для Python
FastAPI Cloud — новая платформа от команды FastAPI: деплой за секунды
epub-utils — Python-библиотека для работы с EPUB
PyCharm Community — JetBrains больше не будет выпускать бинарные сборки CE

🧠 Советы и статьи:
DI в Python: Easy-DI — упрощаем инъекцию зависимостей
Псевдослучайный random — как Python генерирует случайность
История языков программирования — Python, Java, C++, Go
Ускоряем запуск Python-приложений — коротко и по делу
Инструменты для ускорения разработки — Python-экосистема в деле

Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🐍 Вышел Python 3.14.0 beta 1 — первые шаги к следующему релизу

Python 3.14 теперь в бете. Это первый из четырёх запланированных бета-релизов. Важно: не использовать в проде, но — тестировать обязательно, особенно авторам библиотек.

Что нового в 3.14:
— PEP 649: отложенная оценка type annotations
— PEP 750: t-строки — шаблонные строки в духе f-строк
— PEP 784: модуль compression.zstd с поддержкой алгоритма Zstandard
— PEP 768: интерфейс отладки с нулевыми накладными расходами
— Улучшенные сообщения об ошибках
— Поддержка UUID версий 6–8
— Подсветка синтаксиса в unittest, argparse, json, calendar
— Быстрая реализация HMAC с верифицированным кодом HACL\*

Важные изменения:
— Подписи релизов теперь не PGP, а через Sigstore
— Новый инсталлятор для Windows из Microsoft Store
— Экспериментальный JIT в macOS и Windows билдах
— Несовместимые изменения в C API и новые депрекейшены

Следующий релиз: beta 2 — 27 мая 2025
➡️ Поддержка: отчёт об ошибках

Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
⌨️ Топ-вакансий для питонистов за неделю

Python Software Engineer — от 4 800 €, офис (Кипр)

Python Developer, гибрид (Москва)

Senior Python developer — от 300 000 до 350 000 ₽, удалёнка (Санкт-Петербург)

Python Developer — от 220 000 ₽, удалёнка (Москва, Санкт-Петербург, Екатеринбург, Казань)

Junior Python developer — от 100 000 до 130 000 ₽, офис (Москва)

➡️ Еще больше топовых вакансий — в нашем канале Python jobs

Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Шпаргалка: функция с `yield` всегда возвращает генератор

Если в функции присутствует хотя бы один yield, Python преобразует её в генератор — независимо от того, выполнится ли yield при вызове.

Обычное поведение с возвращением списка:
def greet(as_list: bool):
message = 'hello!'
if as_list:
message_list = []
for char in message:
message_list += char
return message_list
else:
return message


>>> greet(as_list=True)
['h', 'e', 'l', 'l', 'o', '!']
>>> greet(as_list=False)
'hello!'


А вот что происходит, если использовать генератор с yield:
def greet(as_generator: bool):
message = 'hello!'
if as_generator:
for char in message:
yield char
else:
return message


>>> greet(as_generator=True)
<generator object greet at 0x0000023F0A066F60>
>>> greet(as_generator=False)
<generator object greet at 0x0000023F0A066F60>


Даже при as_generator=False функция всё равно возвращает объект генератора. Это связано с тем, что наличие yield в теле функции делает её генераторной на уровне определения.

📌 Это важно учитывать при проектировании логики, особенно если ожидается обычное значение, а не итератор.

Библиотека питониста #буст
2025/05/13 14:45:34
Back to Top
HTML Embed Code: